L'API LLM Inference ti consente di eseguire modelli linguistici di grandi dimensioni (LLM) completamente sul dispositivo, che puoi utilizzare per svolgere un'ampia gamma di attività, come la generazione di testo, il recupero di informazioni in forma di linguaggio naturale e il riepilogo dei documenti. L'attività fornisce il supporto integrato per più modelli linguistici di grandi dimensioni di conversione da testo a testo, in modo da poter applicare i modelli di IA generativa on-device più recenti alle tue app e ai tuoi prodotti.
L'attività fornisce il supporto integrato per una serie di LLM. I modelli ospitati nella pagina della community LiteRT sono disponibili in un formato compatibile con MediaPipe e non richiedono ulteriori passaggi di conversione o compilazione.
Puoi utilizzare AI Edge Torch per
esportare i modelli PyTorch in modelli LiteRT (tflite
) con più firme, che sono
inserito in pacchetti con i parametri del tokenizzatore per creare pacchetti di attività. I modelli convertiti con
AI Edge Torch sono compatibili con l'API di inferenza LLM e possono essere eseguiti sul backend
CPU, il che li rende adatti per le applicazioni Android e iOS.
Inizia
Per iniziare a utilizzare questa attività, segui una di queste guide all'implementazione per la tua piattaforma di destinazione. Queste guide specifiche per la piattaforma illustrano un'implementazione di base di questa attività, con esempi di codice che utilizzano un modello disponibile e le opzioni di configurazione consigliate:
Web:
Android:
iOS
Dettagli attività
Questa sezione descrive le funzionalità, gli input, gli output e le opzioni di configurazione di questa attività.
Funzionalità
L'API LLM Inference contiene le seguenti funzionalità chiave:
- Generare testo da testo: genera testo in base a un prompt di testo di input.
- Selezione LLM: applica più modelli per personalizzare l'app in base ai tuoi casi d'uso specifici. Puoi anche addestrare nuovamente il modello e applicare pesi personalizzati.
- Supporto LoRA: espandi e personalizza la funzionalità LLM con il modello LoRA addestrandolo sull'intero set di dati o utilizzando modelli LoRA predefiniti preparati dalla community open source (non compatibile con i modelli convertiti con l'API AI Edge Torch Generative).
Input delle attività | Output delle attività |
---|---|
L'API LLM Inference accetta i seguenti input:
|
L'API LLM Inference genera i seguenti risultati:
|
Opzioni di configurazione
Questa attività ha le seguenti opzioni di configurazione:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito |
---|---|---|---|
modelPath |
Il percorso in cui è archiviato il modello all'interno della directory del progetto. | PERCORSO | N/D |
maxTokens |
Il numero massimo di token (token di input + token di output) gestiti dal modello. | Numero intero | 512 |
topK |
Il numero di token presi in considerazione dal modello in ogni fase di generazione. Limita le previsioni ai k token più probabili. | Numero intero | 40 |
temperature |
L'entità della casualità introdotta durante la generazione. Una temperatura più alta consente di ottenere un testo generato più creativo, mentre una temperatura più bassa produce una generazione più prevedibile. | Float | 0,8 |
randomSeed |
Il seed casuale utilizzato durante la generazione del testo. | Numero intero | 0 |
loraPath |
Il percorso assoluto del modello LoRA localmente sul dispositivo. Nota: questa opzione è compatibile solo con i modelli GPU. | PERCORSO | N/D |
resultListener |
Imposta l'ascoltatore dei risultati in modo che riceva i risultati in modo asincrono. Applicabile solo quando si utilizza il metodo di generazione asincrona. | N/D | N/D |
errorListener |
Imposta un listener di errore facoltativo. | N/D | N/D |
Modelli
L'API LLM Inference supporta molti modelli linguistici di grandi dimensioni di tipo testo a testo, incluso il supporto integrato per diversi modelli ottimizzati per l'esecuzione su browser e dispositivi mobili. Questi modelli leggeri possono essere utilizzati per eseguire inferenze completamente sul dispositivo.
Prima di inizializzare l'API di inferenza LLM, scarica un modello e archivia il file nella directory del progetto. Puoi utilizzare un modello preconvertito dal repository HuggingFace della community LiteRT o convertire un modello in un formato compatibile con MediaPipe con il convertitore generative ai bordi di AI Torch.
Se non hai già un LLM da utilizzare con l'API LLM Inference, inizia con uno dei seguenti modelli.
Gemma-3 1B
Gemma-3 1B è il più recente modello della famiglia Gemma di modelli aperti leggeri e all'avanguardia creati sulla base della stessa ricerca e tecnologia utilizzata per creare i modelli Gemini. Il modello contiene 1 miliardo di parametri e pesi aperti. La variante 1B è il modello più leggero della famiglia Gemma, pertanto è ideale per molti casi d'uso on-device.
Il modello Gemma-3 1B di
HuggingFace è disponibile
nel formato .task
ed è pronto per l'uso con l'API LLM Inference per Android
e le applicazioni web.
Quando esegui Gemma-3 1B con l'API LLM Inference, configura le seguenti opzioni di conseguenza:
preferredBackend
: utilizza questa opzione per scegliere tra un backendCPU
oGPU
. Questa opzione è disponibile solo per Android.supportedLoraRanks
: l'API di inferenza LLM non può essere configurata per supportare l'adattamento a basso ranking (LoRA) con il modello Gemma-3 1B. Non utilizzare le opzionisupportedLoraRanks
oloraRanks
.maxTokens
: il valore dimaxTokens
deve corrispondere alle dimensioni del contesto incorporate nel modello. Può anche essere indicata come cache chiave-valore (KV) o lunghezza del contesto.numResponses
: deve sempre essere 1. Questa opzione è disponibile solo per il web.
Quando esegui Gemma-3 1B su applicazioni web, l'inizializzazione può causare un blocco prolungato nel thread corrente. Se possibile, esegui sempre il modello da un thread di lavoro.
Gemma-2 2B
Gemma-2 2B è una variante 2B di Gemma-2 e funziona su tutte le piattaforme.
Il modello contiene 2 miliardi di parametri e pesi aperti. Gemma-2 2B è nota per le sue capacità di ragionamento all'avanguardia per i modelli della sua classe.
Conversione del modello PyTorch
I modelli generativi PyTorch possono essere convertiti in un formato compatibile con MediaPipe con l'API AI Edge Torch Generative. Puoi utilizzare l'API per convertire i modelli PyTorch in modelli LiteRT (TensorFlow Lite) con più firme. Per maggiori dettagli sulla mappatura ed esportazione dei modelli, consulta la pagina GitHub di AI Edge Torch.
La conversione di un modello PyTorch con l'API AI Edge Torch Generative prevede i seguenti passaggi:
- Scarica i checkpoint del modello PyTorch.
- Utilizza l'API AI Edge Torch Generative per creare, convertire e quantizzare il
modello in un formato file compatibile con MediaPipe (
.tflite
). - Crea un Task Bundle (
.task
) dal file tflite e dal tokenizzatore del modello.
Il convertitore Torch Generative esegue la conversione solo per la CPU e richiede un computer Linux con almeno 64 GB di RAM.
Per creare un Task Bundle, utilizza lo script di aggregazione per creare un Task Bundle. Il processo di raggruppamento pacchettizza il modello mappato con metadati aggiuntivi (ad es. Tokenizer Parameters) necessari per eseguire l'inferenza end-to-end.
La procedura di raggruppamento dei modelli richiede il pacchetto PyPI MediaPipe. Lo script di conversione è disponibile in tutti i pacchetti MediaPipe dopo 0.10.14
.
Installa e importa le dipendenze con quanto segue:
$ python3 -m pip install mediapipe
Utilizza la libreria genai.bundler
per raggruppare il modello:
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
Parametro | Descrizione | Valori accettati |
---|---|---|
tflite_model |
Il percorso del modello TFLite esportato da AI Edge. | PERCORSO |
tokenizer_model |
Il percorso del modello di tokenizzazione SentencePiece. | PERCORSO |
start_token |
Token di inizio specifico del modello. Il token iniziale deve essere presente nel modello di tokenizzazione fornito. | STRING |
stop_tokens |
Modelli di token di fermata specifici. I token di interruzione devono essere presenti nel modello di tokenizzazione fornito. | LISTA[STRINGA] |
output_filename |
Il nome del file del bundle di attività di output. | PERCORSO |
Personalizzazione LoRA
L'API di inferenza LLM di Mediapipe può essere configurata per supportare l'adattamento a basso ranking (LoRA) per i modelli linguistici di grandi dimensioni. Utilizzando modelli LoRA ottimizzati, gli sviluppatori possono personalizzare il comportamento degli LLM tramite un processo di addestramento conveniente.Il supporto LoRA dell'API LLM Inference funziona per tutte le varianti di Gemma e per i modelli Phi-2 per il backend GPU, con i pesi LoRA applicabili solo ai livelli di attenzione. Questa implementazione iniziale funge da API sperimentale per sviluppi futuri, con piani per supportare più modelli e vari tipi di livelli nei prossimi aggiornamenti.
Prepara i modelli LoRA
Segui le istruzioni su HuggingFace per addestrare un modello LoRA ottimizzato sul tuo set di dati con i tipi di modelli supportati, Gemma o Phi-2. I modelli Gemma-2 2B, Gemma
2B e
Phi-2 sono entrambi disponibili su
HuggingFace nel formato safetensors. Poiché l'API LLM Inference supporta solo LoRA nei livelli di attenzione, specifica solo i livelli di attenzione durante la creazione di LoraConfig
come segue:
# For Gemma
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
Per i test, sono disponibili su HuggingFace modelli LoRA ottimizzati e accessibili pubblicamente che si adattano all'API di inferenza LLM. Ad esempio, monsterapi/gemma-2b-lora-maths-orca-200k per Gemma-2B e lole25/phi-2-sft-ultrachat-lora per Phi-2.
Dopo l'addestramento sul set di dati preparato e il salvataggio del modello, ottieni un
file adapter_model.safetensors
contenente i pesi del modello LoRA perfezionato.
Il file safetensors è il checkpoint LoRA utilizzato nella conversione del modello.
Come passaggio successivo, devi convertire i pesi del modello in un Flatbuffer di TensorFlow Lite utilizzando il pacchetto Python MediaPipe. ConversionConfig
deve specificare le opzioni del modello di base e altre opzioni LoRa. Tieni presente che, poiché l'API supporta l'inferenza LoRa solo con GPU, il backend deve essere impostato su 'gpu'
.
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Il convertitore produrrà due file flatbuffer TFLite, uno per il modello di base e l'altro per il modello LoRA.
Inferenza del modello LoRA
L'API di inferenza LLM per web, Android e iOS è stata aggiornata per supportare l'inferenza del modello LoRA.
Android supporta LoRa statico durante l'inizializzazione. Per caricare un modello LoRA, gli utenti devono specificare il percorso del modello LoRA e l'LLM di base.// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath('<path to base model>')
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath('<path to LoRA model>')
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
Per eseguire l'inferenza LLM con LoRA, utilizza gli stessi metodi generateResponse()
o
generateResponseAsync()
del modello di base.